/**axios封装
 * 请求拦截、相应拦截、错误统一处理
 */
import axios from 'axios';
import {Message} from 'element-ui';
import store from '../store/index';
import router from "../router";
import VueCookies from 'vue-cookies'

import {userType} from "../utils/base";

// 环境的切换
if (process.env.NODE_ENV == 'development') {
    axios.defaults.baseURL = 'https://api.ptaedu.cn/';//http://api.ptaedu.cn/
} else if (process.env.NODE_ENV == 'debug') {
    axios.defaults.baseURL = '';
} else if (process.env.NODE_ENV == 'production') {
    axios.defaults.baseURL = 'https://api.ptaedu.cn/';//host:http://192.168.0.165:8000
}

// 请求超时时间
axios.defaults.timeout = 10000;

// post请求头
axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded;charset=UTF-8';

// 请求拦截器
axios.interceptors.request.use(
    config => {
        const token = store.state.token;
        console.log('token',token)
        if(token){
            config.headers.Authorization = token;
        }
        return config;
    },
    error => {
        return Promise.error(error);
    })

// 响应拦截器
axios.interceptors.response.use(
    response => {
        if (response.status === 200 || response.status === 201) {
            return Promise.resolve(response);
        } else {
            return Promise.reject(response);
        }
    },
    // 服务器状态码不是200的情况
    error => {
        if (error.response.status) {
            switch (error.response.status) {
                case 400:
                    break;
                case 401:
                    VueCookies.remove("token");
                    store.commit('setToken',null);
                    console.log(store.state.token)
                    console.log('error---------',error.response.data.error);
                    if (error.response.data.error == 'token超出允许的数量范围'){
                        console.log('999999')
                        Message.closeAll();
                        Message({type:'error',message:'您的账号已在其他设备登录'})
                    }
                    router.push('/login')
                    break;
                case 403:
                    Message({
                        message: "登录过期，请重新登录",
                        type: "error",
                        duration: 1000
                    });
                    // 清除token
                    localStorage.removeItem('token');
                    store.commit('loginSuccess', null);
                    // 跳转登录页面，并将要浏览的页面fullPath传过去，登录成功后跳转需要访问的页面
                    setTimeout(() => {
                        //  router.replace({
                        //      path: "http://study.ptaedu.com/login/?callback="+localhost+"/login/callback",
                        //      query: {
                        //          redirect: router.currentRoute.fullPath
                        //      }
                        //  });
                    }, 1000);
                    break;
                // 404请求不存在
                case 404:
                    Message({
                        message: "网络请求不存在",
                        type: "error",
                        duration: 1000
                    });
                    break;
                // 其他错误，直接抛出错误提示
                default:
                    Message({
                        message: error.response.data.msg,
                        type: "error",
                        duration: 1000
                    });
            }
            return Promise.reject(error.response);
        }
    }
);

/**
 * get方法，对应get请求
 * @param {String} url [请求的url地址]
 * @param {Object} params [请求时携带的参数]
 */
export function get(url, params) {
    return new Promise((resolve, reject) => {
        axios.get(url, {
            params: params
        })
            .then(res => {
                resolve(res.data);
            })
            .catch(err => {
                reject(err.data)
            })
    });
}

/**
 * post方法，对应post请求
 * @param {String} url [请求的url地址]
 * @param {Object} params [请求时携带的参数]
 */
// export function post(url, params) {
//     return new Promise((resolve, reject) => {
//         axios.post(url, QS.stringify(params))
//         .then(res => {
//             resolve(res.data);
//         })
//         .catch(err => {
//             reject(err.data)
//         })
//     });
// }
export function post(url, params) {
    return new Promise((resolve, reject) => {
        axios.post(url, params)
            .then(res => {
                resolve(res.data);
            })
            .catch(err => {
                reject(err.data)
            })
    });
}
